Nějakou dobu jsem si pohrával s JSONem, jen jsem ho vytlačil jako text a nikomu to neublížilo (o čemž vím), ale rád bych začal dělat věci správně. Viděl jsem tolik údajných „standardů“ pro typ obsahu JSON: aplikace / JSON application / x-javascript text / javascript text / x-javascript text / x-json Ale který z nich je správný nebo nejlepší? Shromažďuji, že existují problémy s bezpečností a podporou prohlížeče, které se mezi nimi liší. Vím, že existuje podobná otázka, jaký typ MIME, pokud je JSON vrácen pomocí REST API ?, ale chtěl bych o něco cílenější odpověď.
2020-12-07 21:15:33
1 2 další Pro text JSON: aplikace / JSON Typ média MIME pro text JSON je application / json. Výchozí kódování je UTF-8. (Zdroj: RFC 4627). Pro JSONP (spustitelný JavaScript) se zpětným voláním: aplikace / javascript Zde je několik příspěvků na blogu, které byly zmíněny v příslušných komentářích: Proč byste neměli používat text / html pro JSON Internet Explorer má někdy problémy s aplikací / json Poměrně úplný seznam mimetypů a toho, k čemu je použít Oficiální seznam typů mime na IANA z níže uvedené odpovědi @ gnrfan | IANA zaregistrovala oficiální typ MIME pro JSON jako application / json. Když jsme dotázáni, proč ne text / json, zdá se, že Crockford řekl, že JSON není ve skutečnosti JavaScript ani text a také IANA pravděpodobně rozdávala aplikace / * než text / *. Další zdroje: Druhy médií Žádost o komentář 4627 bluesmoon: JSON má typ | Pro JSON: Typ obsahu: aplikace / json Pro JSON-P: Typ obsahu: aplikace / javascript | Správný typ média MIME pro JSON je samozřejmě application / json, ale je nutné si uvědomit, jaký typ dat se ve vaší aplikaci očekává. Například používám Ext GWT a odpověď serveru musí jít jako text / html, ale obsahuje data JSON. Na straně klienta, posluchač formuláře Ext GWT uploadForm.getForm (). addListener (nový FormListenerAdapter () { @ Přepis public void onActionFailed (formulářový formulář, int httpStatus, řetězec responseText) { MessageBox.alert („chyba“); } @ Přepis public void onActionComplete (formulářový formulář, int httpStatus, řetězec responseText) { MessageBox.alert ("Úspěch"); } }); V případě použití typu odpovědi aplikace / json mi prohlížeč navrhuje uložit soubor. Fragment zdrojového kódu na straně serveru pomocí Spring MVC vrátit nový AbstractUrlBasedView () { @SuppressWarnings („nezaškrtnuto“) @ Přepis protected void renderMergedOutputModel (model mapy, požadavek HttpServletRequest, HttpServletResponse response) vyvolá výjimku { response.setContentType ("text / html"); response.getWriter (). write (json); } }; | JSON: Odpověď jsou dynamicky generovaná data podle parametrů dotazu předaných v adrese URL. Příklad: {"Name": "Foo", "Id": 1234, "Rank": 7} Typ obsahu: aplikace / json JSON-P: JSON s polstrováním. Odezvou jsou data JSON a kolem nich je zabaleno volání funkce. Příklad: functionCall ({"Name": "Foo", "Id": 1234, "Rank": 7}); Typ obsahu: aplikace / javascript | Pokud používáte Ubuntu nebo Debian a obsluhujete soubory .json prostřednictvím Apache, možná budete chtít poskytovat soubory se správným typem obsahu. Dělám to především proto, že chci použít rozšíření JSONView pro Firefox Modul Apache mod_mime to pomůže udělat snadno. U Ubuntu však musíte upravit soubor /etc/mime.types a přidat řádek aplikace / json json Poté restartujte Apache: sudo služba apache2 restart | Pokud voláte webové služby ASP.NET z klientské strany, musíte použít aplikaci / json, aby fungovala. Věřím, že je to stejné pro rámce jQuery a Ext. | Správný typ obsahu pro JSON je application / json UNLESS, který používáte JSONP, také známý jako JSON s Padding, což je ve skutečnosti JavaScript, a správný typ obsahu by tedy byl application / javascript. | Není pochyb o tom, že application / json je nejlepší typ MIME pro odpověď JSON. Ale měl jsem nějaké zkušenosti, kde jsem musel použít application / x-javascript kvůli některým problémům s kompresí. Moje hostitelské prostředí je sdílený hosting s GoDaddy. Neumožňují mi měnit konfigurace serveru. Přidal jsem následující kód do svého souboru web.config pro kompresi odpovědí.Tímto způsobem byly stránky .aspx komprimovány pomocí g-zip, ale odpovědi JSON nebyly. přidal jsem v oddílech statického a dynamického typu. Ale to vůbec nekomprimuje odpovědi JSON. Poté jsem odstranil tento nově přidaný typ a přidal v oddílech statického i dynamického typu a změnil typ odpovědi v .ashx (asynchronní obslužný program) do application / x-javascript A teď jsem zjistil, že moje odpovědi JSON byly komprimovány pomocí g-zip. Osobně tedy doporučuji použít application / x-javascript pouze pokud chcete komprimovat své odpovědi JSON ve sdíleném hostitelském prostředí. Protože ve sdíleném hostingu vám neumožňují změnit IISkonfigurace. | Pouze při použití aplikace / json jako typu MIME mám následující (od listopadu 2011 s nejnovějšími verzemi prohlížeče Chrome, Firefox s Firebug): Už žádná varování z Chromu, když je JSON načten ze serveru. Firebug přidá do odpovědi kartu zobrazující data JSON formátovaný. Pokud je typ MIME odlišný, zobrazí se pouze jako „Obsah odpovědi“. | Ne vše funguje pro typ obsahu application / json. Pokud používáte odeslat formulář Ext JS k odeslání souboru, mějte na paměti, že prohlížeč analyzuje odpověď serveru a vytvoří dokument pro